package org.jeecg.modules.pubmgr.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.modules.pubmgr.entity.Paramcode;
import org.jeecg.modules.pubmgr.entity.Parameter;
import org.jeecg.modules.pubmgr.mapper.ParamcodeMapper;
import org.jeecg.modules.pubmgr.mapper.ParameterMapper;
import org.jeecg.modules.pubmgr.service.IParamcodeService;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * @Description: 参数分类管理子级
 * @Author: jeecg-boot
 * @Date: 2019-05-23
 * @Version: V1.0
 */
@Service
public class ParamcodeServiceImpl extends ServiceImpl<ParamcodeMapper, Paramcode> implements IParamcodeService {

    @Autowired
    private ParamcodeMapper paramcodeMapper;

    @Autowired
    private ParameterMapper parameterMapper;

    @Override
    public List<Paramcode> selectByMainId(String mainId) {
        return paramcodeMapper.selectByMainId(mainId);
    }

    @Override
    public int updateParamCodeByNameCode(String paramName, String paramCode, String fdParameterprice, String fdParamcodedesc) {
        Paramcode paramcode = getParamPreByCode(paramName, paramCode);
        if(null == paramcode){
            return -1;
        }
        paramcode.setFdParameterprice(fdParameterprice);
        paramcode.setFdParamcodedesc(fdParamcodedesc);
        return paramcodeMapper.updateById(paramcode);
    }

    @Override
    public Paramcode getParamPreByCode(String paramName, String paramCode) {
        Parameter parameter = getParameterByName(paramName);
        if (null != parameter) {
            return getParamCodeByIdCode(parameter.getId(), paramCode);
        }
        return null;
    }

    @Override
    public List<DictModel> getParamPreByName(String paramName,String text) {
        Parameter parameter = getParameterByName(paramName);
        if (null != parameter) {
            List<Paramcode> paramcodes  = selectByMainId(parameter.getId());
            return getDictModelByParamCodes(paramcodes,text);
        }
        return new ArrayList<>();
    }

    private List<DictModel> getDictModelByParamCodes(List<Paramcode> paramcodes,String text){
        if(null == paramcodes || paramcodes.size() == 0){
            return new ArrayList<>();
        }

        List<DictModel> dictModels = new ArrayList<>();
        for (Paramcode paramcode : paramcodes){

            DictModel dictModel = new DictModel();
            dictModel.setValue(paramcode.getFdParamcode());
            if(null == text){
                dictModel.setText(paramcode.getFdParamcode());
            } else {
                dictModel.setText(paramcode.getFdParamcodename());
            }
            dictModels.add(dictModel);
        }
        return dictModels;
    }

    private Parameter getParameterByName(String paramName) {
        QueryWrapper<Parameter> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("fd_paramName", paramName);
        return parameterMapper.selectOne(queryWrapper);
    }

    private Paramcode getParamCodeByIdCode(String paramId, String paramCode) {
        QueryWrapper<Paramcode> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("fd_paramid", paramId);
        queryWrapper.eq("fd_paramCode", paramCode);
        return paramcodeMapper.selectOne(queryWrapper);
    }
}
